import { loginAPI, getUserInfoAPI, getBaseUserInfoAPI } from '@/api/user'
// 调用cookie（在utils的auth.js中）进行存储token
import { getToken, setToken, removeToken } from '@/utils/auth'
import { resetRouter } from '@/router/index'
const state = {
  token: getToken() || '',
  userInfo: {}
}

const getters = {}

const mutations = {
  // 在vuex中存token
  setToken(state, newToken) {
    // 将token存储到cookie
    setToken(newToken)
    state.token = newToken
  },
  // 获取用户信息(存储到state中)
  setUserInfo(state, newUserInfo) {
    state.userInfo = newUserInfo
  },
  // 清空token和用户信息
  logout(state) {
    state.token = ''
    removeToken()
    state.userInfo = {}
    resetRouter()
  }
}
const actions = {
  // 因为在vuex中存token所以也在vuex中调用接口
  // 登录接口
  login(store, loginForm) {
    // promise包装获取token的操作
    return new Promise((reslove, reject) => {
      loginAPI(loginForm).then(res => {
        // 在actions中调用mutations方法
        store.commit('setToken', res.data)
        reslove(res)
      }).catch(err => {
        reject(err)
      })
    })
  },
  // 获取用户信息（调接口）
  async getUserinfo(store) {
    // 获取用户名
    const res = await getUserInfoAPI()
    // 因为都是对用户信息操作的请求所以可以放在一起
    // 获取用户头像
    const res2 = await getBaseUserInfoAPI(res.data.userId)
    // 当图片路径错误时修改图片
    /* res2.data.staffPhoto = 'http://www.baidu.com/xxx' */
    // 将我们要的数据合并放到vuex中
    const BaseDate = { ...res.data, ...res2.data }
    store.commit('setUserInfo', BaseDate)
    return BaseDate
  }
}

export default {
  namespaced: true,
  state,
  getters,
  mutations,
  actions
}

